// 定义登录相关的路由

const express = require('express')
const md5 = require('md5')

const adminModel = require('../db/model/adminModel')
// 引入自己封装的生成token和解密token的jwt对象
const jwt = require('../utils/jwt')

const router = express.Router()

// 登录接口
router.post('/login', async (req, res) => {
  // 获取浏览器上传的用户名和密码
  const { username, password } = req.body
  // 去数据库中查询是否有这条信息
  const admin = await adminModel.findOne(
    { username, password: md5(password) },
    { password: 0 }
  )
  // 判断是否查找到了指定的管理员数据
  if (admin) {
    // 生成token
    const token = jwt.encode(admin._id)

    // 将token存储到数据库中, 登录的用户是谁,就修改谁的token
    await adminModel.updateOne({ _id: admin._id }, { $set: { token } })

    // 将token添加到响应主体中,响应给浏览器
    res.send({ success: true, msg: '登录成功', token, admin })
  } else {
    res.send({ success: false, msg: '登录失败,请确认账户名和密码正确' })
  }
})

// 验证token接口
router.post('/verifyToken', async (req, res) => {
  // 接收浏览器上传的token信息
  const { authorization } = req.body
  // 判断浏览器是否上传了token
  if (authorization) {
    // 去数据库中查询,是否有这个token
    const admin = await adminModel.findOne({ token: authorization })

    if (admin) {
      // token是否在有效期
      const result = jwt.decode(authorization)
      // 判断token中存储的时间戳是否比当前时间戳大,如果大,则证明token在有效期内
      if (result.expires > Date.now()) {
        res.send({ success: true, msg: 'token有效' })
        return
      }
    }
  }
  res.send({ success: false, msg: 'token无效' })
})

// 退出登录的接口
router.post('/logout', async (req, res) => {
  // 获取要退出登录的用户的id
  const { id } = req.body
  await adminModel.updateOne({ _id: id }, { $set: { token: '' } })
  res.send({ success: true, msg: '退出成功' })
})

module.exports = router
